const foo = new {
  bar = "bar"
  baz = bar
  local loc = bar
  qux = loc
  local function f() = 1
  qix = f()
}

const bar {
  qux = 1
  local function buzz() = 5
  baz {
    corge = 2
    biz {
      buz = qux
      qup = corge
      fuzz = buzz()
    }
  }
}

amend = (foo) {
  baz = "amend"
}

class Thing {
  prop1: Int = 5
  prop2: Int
  prop3: Thing2
}

class Thing2 {
  prop4: Int = 5
}

const thing = new Thing {
  // can reference properties from implicit `this` if within const scope
  prop2 = prop1
}

const thing2 = new Thing {
  // can reference properties from explicit `this` if within const scope
  prop2 = this.prop1
}

const thing3 = new Thing {
  // can reference properties with explicit `super` if within const scope
  prop2 = super.prop1
}

const thing4 = new Thing {
  prop2 = 2
  prop3 {
    prop4 = 10
  }
}
